package com.tchhy.mvplibrary.ui.fragment

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.ColorRes
import com.gyf.immersionbar.ImmersionBar
import com.tchhy.basemodule.R
import com.tchhy.basemodule.utils.SystemUtils
import com.tchhy.basemodule.widgets.dialog.ProgressLoadingDialog

/**
 * Author: wfy
 *
 * time: 2018/8/22
 *
 */
abstract class BaseLazyFragment : PermissionFragment() {

    protected var mnflater: LayoutInflater? = null
    abstract fun setContentLayout(): Int

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(setContentLayout(), null, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        //initImmersionBar()
    }


    var mImmersionBar: ImmersionBar? = null

    fun initImmersionBar() {
        mImmersionBar = ImmersionBar.with(this).also {
            it.fitsSystemWindows(false)
            it.navigationBarColor(navigationBarColor(it))
            it.statusBarDarkFont(false, 0.2F)
            it.transparentStatusBar()
            it.init()
        }
    }

    @ColorRes
    open fun navigationBarColor(immersionBar: ImmersionBar): Int {
        immersionBar.navigationBarDarkIcon(true) //导航栏图标是深色，不写默认为亮色
        return R.color.common_white
    }

    /**
     * 子类fragment是否使用ImmersionBar
     * true：使用fragment里面的ImmersionBar
     * false：使用activity里面设置的ImmersionBar
     */
    open fun isUseImmersionBar(): Boolean = true


    /**
     * 有导航栏的情况下，Activity是否全屏显示
     */
    open fun isFullScreen() = false


    /*
        是否时第一次加载数据，如果时第一次，则加载全部数据。
        如果不是第一次加载数据，有些需求是页面可能只是部分加载数据
     */
    protected var mIsFirstLoadData = true
    /*
        是否可见
     */
    protected var mIsVisible = false
    /*
        准备就绪,一般就是
     */
    protected var mIsPrepared = false

    protected var mProgressLoadingDialog: ProgressLoadingDialog? = null

    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        if (userVisibleHint) {
            mIsVisible = true
            onVisible()
        } else {
            mIsVisible = false
            onInvisible()
        }
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    /*
        此方法在欧娜onViewCreated之后被调用
     */
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        mProgressLoadingDialog = ProgressLoadingDialog.create(context!!)
        mIsPrepared = true
        loadData()
    }

    override fun onDestroy() {
        super.onDestroy()
        mProgressLoadingDialog?.destroy()
//        SystemUtils.fixInputMethodManagerLeak(context!!)
    }


    open fun onInvisible() {}

    /**
     * 显示时加载数据,需要这样的使用
     * 注意声明 isPrepared，先初始化
     * 生命周期会先执行 setUserVisibleHint 再执行onActivityCreated
     * 在 onActivityCreated 之后第一次显示加载数据，只加载一次，之后可能只加载部分数据
     */
    open fun loadData() {
    }

    open fun onVisible() {
        loadData()
    }


}